package com.dtx.factory;

import com.dtx.day06.dynamicProxy.TestDynamicProxy;

import java.lang.reflect.Proxy;
import java.time.LocalDateTime;
import java.util.Arrays;

public class ProxyLoggerFactoryBean {

    public static <T> T getProxy(Object target){

        //创建代理对象，必须通过 Proxy
        Object proxy = Proxy.newProxyInstance(TestDynamicProxy.class.getClassLoader(),
                target.getClass().getInterfaces(), (proxy0,method,args) ->{
                    // 获取当前系统时间，获取方法名，获取参数
                    StringBuilder sb = new StringBuilder();
                    sb.append("执行时间"+ LocalDateTime.now())
                            .append(",执行的方法是"+method.getName())
                            .append("，传入的参数是"+ Arrays.toString(args));

                    // 调用 目标对象的 方法，需要一个目标对象
                    Object invoke = method.invoke(target, args);
                    sb.append("返回结果" + invoke);
                    System.out.println(sb);
                    return invoke;
        });
        return (T) proxy;
    }
}
